package com.ruoyi.central.domain;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.annotation.Length;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.validation.group.InsertGroup;
import com.ruoyi.common.validation.group.UpdateGroup;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Set;

/**
 * 物料对象 top_central_material
 *
 * @author SunLuQuan
 * @date 2022-04-12
 */
@Data
@TableName("top_central_material")
public class TopCentralMaterial extends BaseEntity{

private static final long serialVersionUID = 1L;

    /** 编号 */
    @Excel(name = "编号")
    @TableId
    @NotBlank(groups = {InsertGroup.class,UpdateGroup.class},message = "物料唯一编码不能为空")
    @Length(min = 0,max = 50,message="编号 数据长度不能大于 50")
    private String id;

    /** 默认工位编号 */
    @Length(min = 0,max = 10,message="默认工位编号 数据长度不能大于 10")
    @NotNull(groups = {InsertGroup.class,UpdateGroup.class},message = "默认工位编号不能为空")
    private Integer operationStationId;

    /**当前物料绑定工位对象 */
    @TableField(exist = false)
    private TopCentralOperationStation operationStation;

    /** 工艺编号 */
    @Length(min = 0,max = 10,message="工艺编号 数据长度不能大于 10")
    @NotNull(groups = {InsertGroup.class,UpdateGroup.class},message = "工艺编号不能为空")
    private Integer artProcessId;


    /** 物料批次号 */
    @Excel(name = "物料批次号")
    @NotBlank(groups = {InsertGroup.class},message = "物料批次号不能为空")
    @Length(min = 0,max = 50,message="物料批次号 数据长度不能大于 50")
    private String batchNo;

    /** 物料类型 */
    @Excel(name = "物料类型")
    @NotNull(groups = {InsertGroup.class},message = "物料类型不能为空")
    @Length(min = 0,max = 10,message="物料类型 数据长度不能大于 10")
    private Integer typeId;

    /** 合成物料类型 */
    @Excel(name = "合成物料类型")
    @NotNull(groups = {InsertGroup.class},message = "合成物料类型不能为空")
    @Length(min = 0,max = 10,message="合成物料类型 数据长度不能大于 10")
    private Integer parentTypeId;

    /** 录入类型 */
    @Excel(name = "录入类型")
    @Length(min = 0,max = 1,message="录入类型 数据长度不能大于 1")
    private Integer createType;

    /** 物料状态 */
    @Excel(name = "物料状态")
    @Length(min = 0,max = 1,message="物料状态 数据长度不能大于 1")
    private Integer materialStatus;

    /** 执行工艺对象 **/
    @TableField(exist = false)
    private TopCentralArtProcessRun artProcessRun;

    /** 工艺对象 */
    @TableField(exist = false)
    private TopCentralArtProcess artProcess;

    /**表中没有的字段*/
    @TableField(exist = false)
    private Integer weight;

    /**产品编号*/
    @NotNull(groups = InsertGroup.class,message="产品类型不能为空")
    @TableField(exist = false)
    private Integer productTypeId;

    /**产品对象*/
    @TableField(exist = false)
    private TopCentralProductType productType;

    /**物料类型对象*/
    @TableField(exist = false)
    private TopCentralProductType materialType;

    /**父物料类型对象*/
    @TableField(exist = false)
    private TopCentralProductType parentMaterialType;

    /** 新增半成品对象 需要使用的子节点 */
    @TableField(exist = false)
    private Set<String> childMaterialIds;

    /** 新增半成品对象 需要使用的子节点 */
    @TableField(exist = false)
    private List<TopCentralMaterial> childMaterialList;

    /** 修改时使用 数据库中的旧物料对象*/
    @TableField(exist = false)
    private TopCentralMaterial oldMaterial;
}
